基于RK3568的Linux开发 |
您所在的位置:网站首页 › smart sdk › 基于RK3568的Linux开发 |
第一篇 RK3568 Linux系统移植
文章目录
目录 第一篇 RK3568 Linux系统移植 文章目录 前言 一、编译环境搭建 1.编译环境介绍 2.安装依赖 二、获取官方的RK356X_Linux_SDK包 1.解压RK356X_Linux_SDK压缩包 2.目录结构 三、编译linux系统固件 1 选择合适的板级配置文件 2.编译Linux系统 3.打包固件 四、系统移植和定制化 1.板级配置文件定制化 1)新建默认配置文件 2)新建设备树文件 3)新建板级配置文件 2.修改电源域 3.更改调试串口 4.下载固件 5.查看调试信息 6.降低内存的运行频率 7.更新固件 五、debian根文件系统的构建 1.配置环境变量 2.编译debian 3.更新固件 参考教程 前言本文主要介绍了如何编译官方的RK356X_Linux_SDK包。针对自制的RK3568板卡对Linux系统进行移植和裁剪。 一、编译环境搭建 1.编译环境介绍操作系统:Ubuntn18.04 内存:4GB及其以上 2.安装依赖在安装依赖之前,对操作系统进行更新 sudo apt update 安装依赖 sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \ expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \ qemu-user-static live-build bison flex fakeroot cmake \ unzip device-tree-compiler python-pip ncurses-dev python-pyelftools 确保所有依赖安装成功后,才能进行下一步 二、获取官方的RK356X_Linux_SDK包 1.解压RK356X_Linux_SDK压缩包将下载好的RK356X_LINUX_20220831文件放到/home/user目录下,如图所示: 进入RK356X_LINUX_20220831目录: user@ubuntu18:~$ cd RK356X_LINUX_20220831/ 解压RK356X_Linux_SDK压缩包 user@ubuntu18:~/RK356X_LINUX_20220831$ sudo cat x* | tar xz 解压后的文件如图所示: 进入SDK包根目录 user@ubuntu18:~/RK356X_LINUX_20220831$ cd RK356X_LINUX_SDK_V1.3.0_20220620/RK356X_LINUX_SDK_V1.3.0_20220620/ 2.目录结构SDK包根目录下的文件夹参考如下: 注意:以下操作均在SDK包的根目录下进行 瑞芯微为我们提供了一个很方便的编译脚本build.sh.可进行分步编译和一键编译。 查看编译脚本的帮助信息 ./build.sh -h 查看系统默认的板级配置文件 ./build.sh lunch 选择板级配置文件 根据自己板子芯片和内存的选型,选择和板子适配的板级配置文件 方便后期进行系统移植和定制化 例如:我们使用的芯片为RK3568,内存为DDR4,因此选择第5个配置文件 2.编译Linux系统由于我们是第一次进行编译,选择全自动编译,确保SDK包可以使用 ./build.sh all 在编译kernel的过程中,系统会弹出电源域的图形化界面,所以需要对设备树中的电源域配置进行再次确认,找到对应的设备树文件,与之一一对应即可。 电源域的图形化界面如图所示: 电源域配置所在的设备树文件为rk3568-evb.dtsi 该文件位为SDK包根目录下/kernel/arch/arm64/boot/dts/rockchip/目录下 设备树中的电源域默认配置如下: &pmu_io_domains { status = "okay"; pmuio2-supply = ; vccio1-supply = ; vccio3-supply = ; vccio4-supply = ; vccio5-supply = ; vccio6-supply = ; vccio7-supply = ; }; 3.打包固件执行以下命令,生成的镜像将会被打包到rockdev 目录下 ./mkfirmware.sh 执行以下命令,在rockdev 目录下生成update.img ./build.sh updateimg RK3568的默认配置文件存放在SDK工程kernel/arch/arm64/configs/目录下 在当前目录下,新建一个名为wheel_linux_defconfig的默认配置文件(可根据自己要求进行命名) 将rockchip_linux_defconfig文件中的内容复制到wheel_linux_defconfig,在板级配置文件会将默认的配置文件更改为新建的配置文件 在进行驱动开发时,我们可以通过内核的图形化界面和直接更改默认配置文件的方式,选择驱动是编译进内核还是编译成模块,亦或者是不编译。使用自己的默认配置文件可以实现驱动的定制化。 2)新建设备树文件RK3568的设备树文件存放在SDK工程kernel/arch/arm64/boot/dts/rockchip/目录下 在当前目录下,新建一个名为rk3568-wheel-lpddr4.dts的设备树文件(一般命名格式为:芯片名称-厂商名称-内存类型.dts) 将rk3568-evb1-ddr4-v10-linux.dts文件中的内容复制到rk3568-wheel-lpddr4.dts 内容如下 // SPDX-License-Identifier: (GPL-2.0+ OR MIT) /* * Copyright (c) 2020 Rockchip Electronics Co., Ltd. * */ #include "rk3568-evb1-ddr4-v10.dtsi" #include "rk3568-linux.dtsi" #include使用自己的设备树文件,可以根据自己的需求对内核的功能进行定制化。对于需要修改的设备节点,只需要在自己的设备树文件当中修改即可。这样既可以保证原始设备树的完整性,又与其他不同厂商制作板卡的设备树文件相互独立,互不干扰。 3)新建板级配置文件RK3568的板级配置文件存放在SDK工程device/rockchip/rk356x目录下 默认的板级配置文件为 其中我们主要需要关注的内容如下: 新建一个BoardConfig-rk3568-wheel-lpddr4.mk板级配置文件 复制BoardConfig-rk3568-evb1-ddr4-v10.mk文件的内容到BoardConfig-rk3568-wheel-lpddr4.mk板级配置文件当中,并对其进行修改 修改后的内容如下 到此,通过修改自己的板级配置文件,简单现了Linux内核的定制化,接下来,便是针对自己的板卡,对内核进行裁剪和移植。 2.修改电源域在SDK工程/kernel/arch/arm64/boot/dts/rockchip/目录下的rk3568-wheel-lpddr4.dts设备树文件中进行电源域的修改 电源域默认配置如下: &pmu_io_domains { status = "okay"; pmuio2-supply = ; vccio1-supply = ; vccio3-supply = ; vccio4-supply = ; vccio5-supply = ; vccio6-supply = ; vccio7-supply = ; };根据自制板卡的原理图,对电源域进行配置 配置的电源域配置为 &pmu_io_domains { status = "okay"; //自己的板子电源域配置 pmuio1-supply = ; pmuio2-supply = ; vccio1-supply = ; vccio3-supply = ; vccio4-supply = ; vccio5-supply = ; vccio6-supply = ; vccio7-supply = ; }; &i2c0 { rk809: pmic@20 { regulators { //自己的板子不输出电压 vccio_0v: LDO_REG4 { regulator-always-off; regulator-boot-on; regulator-min-microvolt = ; regulator-max-microvolt = ; regulator-name = "vccio_0v"; regulator-state-mem { regulator-off-in-suspend; }; }; /* //默认LDO_REG4节点配置 vccio_acodec: LDO_REG4 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = ; regulator-max-microvolt = ; regulator-name = "vccio_acodec"; regulator-state-mem { regulator-off-in-suspend; }; }; */ }; }; }; 3.更改调试串口修改uboot的调试串口 找到SDK工程中rkbin/tools/目录下的ddrbin_param.txt文件 对其进行如下的修改: uart id=4 uart iomux=1 在rkbin/tools/目录下执行以下命令,使新配置生效 ./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.13.bin 修改uboot设备树中调试串口的配置 找到SDK工程u-boot/arch/arm/dts/目录下的rk3568-u-boot.dtsi设备树文件 修改如下: / { aliases { serial4 = &uart4; //添加uart4的配置 ethernet0 = &gmac0; ethernet1 = &gmac1; mmc0 = &sdhci; mmc1 = &sdmmc0; mmc2 = &sdmmc1; }; chosen { stdout-path = &uart4; //uart2->uart4 u-boot,spl-boot-order = &sdmmc0, &sdhci, &nandc0, &spi_nand, &spi_nor; }; }; &uart4 { //uart2->uart4 clock-frequency = ; u-boot,dm-spl; /delete-property/ pinctrl-names; /delete-property/ pinctrl-0; status = "okay"; };修改kernel的调试串口 在SDK工程对/kernel/arch/arm64/boot/dts/rockchip/目录下的rk3568-wheel-lpddr4.dts设备树文件中进行调试串口修改,修改后的调试串口节点如下: /{ //调试串口配置uart2->uart4 chosen:chosen { bootargs = "earlycon=uart8250,mmio32,0xfe680000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait"; //uart4的地址为0xfe680000 }; fiq-debugger { //uart2->uart4 compatible = "rockchip,fiq-debugger"; rockchip,serial-id = ; //uart4对应的serial-id为4 rockchip,wake-irq = ; /* If enable uart uses irq instead of fiq */ rockchip,irq-mode-enable = ; rockchip,baudrate = ; /* Only 115200 and 1500000 */ interrupts = ; pinctrl-names = "default"; pinctrl-0 = ; //uart4使用的GPIO status = "okay"; }; //关闭uart4普通串口功能 &uart4 { status = "disabled"; };更改完成后,需要对uboot和kernel进行重新编译 4.下载固件使用瑞芯微开发工具RKDevTool,它提供分立升级固件及整个 update 升级固件功能 点击升级固件。点击固件,选择编译好的update.img镜像文件 最后点击升级即可 串口调试工具MobaXterm下载地址:https://mobaxterm.mobatek.net/ 使用串口调试器连接PC端USB和板卡的UART4 打开串口调试工具MobaXterm。 选择 session 为 Serial。 将 Serial port 修改为在设备管理器中找到的 COM 端口。 设置 Speed (bsp) 为 1500000。 点击 OK 按钮。 给板子上电,接收调试信息 根据调试信息,定位系统出现问题的位置,对内核进行相应的修改 根据SDK工程docs/Common/DDR目录下的Rockchip_Trouble_Shooting_DDR_CN.pdf(DDR问题排查手册)的描述。尝试通过降低内存的运行频率的方式来提高系统的稳定性。 6.降低内存的运行频率找到SDK工程中rkbin/tools/目录下的ddrbin_param.txt文件 对其进行如下的修改: /* Please get help from ddrbin_tool_user_guide.txt and './ddrbin_tool -h' */ start tag=0x12345678 ddr2_freq= lp2_freq= ddr3_freq= lp3_freq= ddr4_freq= lp4_freq=1000 //将lpddr4的最高频率设置为1000Mhz lp4x_freq= lp5_freq= 在rkbin/tools/目录下执行以下命令,使新配置生效 ./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.13.bin 7.更新固件配置生效后,重新编译内核并打包update.img系统镜像 ./mkfirmware.sh ./build.sh updateimg 使用RKDevTool将新编译好的固件下载到板子当中(详细操作见4.4小节) 重新给板子上电,系统正常运行。成功进入buildrootGUI界面 五、debian根文件系统的构建 1.配置环境变量export RK_ROOTFS_SYSTEM=debian //如果是yocto 就export RK_ROOTFS_SYSTEM=yocto 2.编译debian./build.sh debian 3.更新固件执行以下命令,生成新的update.img ./mkfirmware.sh ./build.sh updateimg 使用RKDevTool将新编译好的固件下载到板子当中(详细操作见4.4小节) 参考教程1. 编译 Linux 固件 — Firefly Wiki (t-firefly.com) 2. RK3568下载SDK编译源码 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |